package fr.auzaiphe.admin.bdd;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import fr.auzaiphe.admin.model.Alerte;
import fr.auzaiphe.admin.model.Jeu;
import fr.auzaiphe.admin.model.Joueur;

/**
 * Interface vers la base de donnée pour la gestion d'un joueur.
 * @author Jojo
 *
 */
public class JoueurBDD
{
	private BaseDeDonnee bdd;        // Pour l'intéraction avec le joueur
	//private int id;                  // ID du joueur dans la base
	private Joueur imageJoueur;      // Image du joueur dans l'application

	/*
	public ResultSet rechercheID(int id)
	{
		String requete = "SELECT * FROM JOUEUR WHERE JOUEUR_ID = '"+id+"';";

		return this.bdd.executerRequete(requete);
		
		while( resultat.next()){
			
					Integer.parseInt(resultat.getString("JOUEUR_ID")), 
					resultat.getString("JOUEUR_NOM_PERSONNAGE"), 
					resultat.getString("JOUEUR_PRENOM_PERSONNAGE"),
					resultat.getString("JOUEUR_MOT_DE_PASSE"),
					resultat.getString("JOUEUR_BACKGROUND"),
					resultat.getString("JOUEUR_TEMPS_RESTANT"),
					resultat.getString("ALERTE_TEXTE"),
					resultat.getString("ALERTE_LIEN_FICHIER");
		}
	}
	*/
	/**
	 * Constructeur pincipale
	 * @param pBdd
	 * @param pJoueur Image du joueur de l'application
	 */
	public JoueurBDD( BaseDeDonnee pBdd, Joueur pJoueur )
	{
		this.bdd = pBdd;
		this.imageJoueur = pJoueur;
		this.sauvegarde();
	}

	/**
	 * echangeTemps entre 2 joueur
	 * @param donneur Joueur qui donnee du temps
	 * @param receveur Joueur qui reçois du temps
	 * @param temps temps echanger
	 */
	public static void echangeTemps(Joueur donneur, Joueur receveur, int temps )
	{
		String requete;

		requete = "INSERT INTO A_ECHANGER_TEMPS(" +
				"JOUEUR_ID_DONNEUR," +
				"JOUEUR_ID_RECEVEUR," +
				"TEMPS" +
				") VALUES(" +
				"'"+ donneur.getId() +"'," +
				"'"+ receveur.getId() +"'," +
				"'"+ temps +"');";
		try
		{
			donneur.getImageBDD().bdd.executerUpdate(requete);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * enregiste en bdd la dernière connection d'un joueur
	 * @param temps en seconds (dernière connection)
	 */
	public void connectionJoueur(int temps)
	{
		String requete;

		requete = "INSERT INTO EVT_CONNEXION_JOUEUR(" +
				"JOUEUR_ID," +
				"HEURE" +
				") VALUES(" +
				"'"+ this.imageJoueur.getId()+"'," +
				"'"+ temps +"');";
		try
		{
			this.bdd.executerUpdate(requete);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * enregiste en bdd la dernière deconnection d'un joueur
	 * @param temps en seconds (dernière deconnection)
	 */
	public void deconnectionJoueur(int temps)
	{
		String requete;

		requete = "INSERT INTO EVT_DECONNEXION_JOUEUR(" +
				"JOUEUR_ID," +
				"HEURE" +
				") VALUES(" +
				"'"+ this.imageJoueur.getId()+"'," +
				"'"+ temps +"');";
		try
		{
			this.bdd.executerUpdate(requete);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}


	/**
	 * @return Liste de joueurs correspondant à la recherche
	 * @throws SQLException
	 */
	public ResultSet rechercheID() throws SQLException
	{
		String requeteSelectUsers = "SELECT * FROM JOUEUR WHERE JOUEUR_ID = '"+ this.imageJoueur.getId() +"';";

		return this.bdd.executerRequete(requeteSelectUsers);
	}

	/**
	 * Sauvegarde le joueur dans la base de donn?e
	 * Si le joueur n'est pas encore dans la base
	 * on l'ajoute et on récupère l'id
	 * Sinon on ne fait qu'une mise à jour
	 */
	public void sauvegarde()
	{
		String requete;

		if ( this.imageJoueur.getId() == -1 )
		{
			requete = "INSERT INTO JOUEUR(" +
					"JOUEUR_NOM_PERSONNAGE," +
					"JOUEUR_PRENOM_PERSONNAGE," +
					"JOUEUR_MOT_DE_PASSE," +
					"JOUEUR_BACKGROUND," +
					"JOUEUR_TEMPS_RESTANT" +
					") VALUES(" +
					"'"+ this.imageJoueur.getNomPersonnage().replace('\'','’') +"'," +
					"'"+ this.imageJoueur.getPrenomPersonnage().replace('\'','’') +"'," +
					"'"+ this.imageJoueur.getPassword().replace('\'','’') +"'," +
					"'"+ this.imageJoueur.getBackgroundPersonnage().replace('\'','’') +"'," +
					"'"+ this.imageJoueur.getChrono().getSecondesRestantes() +"');";
			try
			{
				this.bdd.executerUpdate(requete);
				// Recupération de l'id d'ajout du champ
				ResultSet resultat = this.bdd.executerRequete("CALL IDENTITY()");
				resultat.next();
				this.imageJoueur.setId(resultat.getInt(1));
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
		}
		else
		{
			requete ="UPDATE JOUEUR SET "+
			"JOUEUR_NOM_PERSONNAGE='"+ this.imageJoueur.getNomPersonnage().replace('\'','’') +"',"+
			"JOUEUR_PRENOM_PERSONNAGE='"+ this.imageJoueur.getPrenomPersonnage().replace('\'','’') +"',"+
			"JOUEUR_MOT_DE_PASSE='"+ this.imageJoueur.getPassword().replace('\'','’') +"',"+
			"JOUEUR_BACKGROUND='"+ this.imageJoueur.getBackgroundPersonnage().replace('\'','’') +"',"+
			"JOUEUR_TEMPS_RESTANT="+ this.imageJoueur.getChrono().getSecondesRestantes() +""+
			"WHERE JOUEUR_ID=" + this.imageJoueur.getId() + ";";

			try
			{
				this.bdd.executerUpdate(requete);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
		}
	}


	/**
	 * Supprimer le joueur du la base de donnée
	 */
	public void supprimer()
	{
		String requete = "DELETE FROM JOUEUR WHERE JOUEUR_ID = '"+ this.imageJoueur.getId() +"';";

		try
		{
			this.bdd.executerUpdate(requete);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * Affiche en console les champs du joueurs
	 */
	public void afficher()
	{
		System.out.println("-----------------------------------------------------------------------------");
		System.out.println("JOUEUR_ID\t\t\t" + this.imageJoueur.getId() );
		System.out.println("JOUEUR_NOM_PERSONNAGE\t\t" + this.imageJoueur.getNomPersonnage() );
		System.out.println("JOUEUR_PRENOM_PERSONNAGE\t" + this.imageJoueur.getPrenomPersonnage() );
		System.out.println("JOUEUR_MOT_DE_PASSE\t\t" + this.imageJoueur.getPassword() );
		System.out.println("JOUEUR_BACKGROUND\t\t" + this.imageJoueur.getBackgroundPersonnage() );
		System.out.println("JOUEUR_TEMPS_RESTANT\t\t" + this.imageJoueur.getChrono().getSecondesRestantes() );
		System.out.println("-----------------------------------------------------------------------------");
	}
}

